package es.albarregas.dao;

import java.sql.SQLException;
import java.text.SimpleDateFormat;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.GregorianCalendar;

import es.albarregas.modelo.Cliente;

public class UsuarioDAO extends ConexionDAO {
	
	private static final String INSERT_STATEMENT = 
		"insert into usuarios (email,clave,ultimoacceso) values(?,password(?),?);";
	private static final String UPDATE_STATEMENT = 
		"update usuarios set Email=?,Clave=password(?) where Codigo=?";
	
	public void crearUsuario(Cliente cliente) {
		try {
			getConexion();
			preparada = conexion.prepareStatement(INSERT_STATEMENT);
			preparada.setString(1, cliente.getEmail());
			preparada.setString(2, cliente.getClave());
			Calendar calendario = GregorianCalendar.getInstance();
			java.util.Date fecha = calendario.getTime();
			SimpleDateFormat formatoDeFecha = new SimpleDateFormat("yyyy/MM/dd");
			preparada.setString(3, formatoDeFecha.format(fecha));
			preparada.executeUpdate();
		} catch(SQLException ex){
			ex.printStackTrace();
		} finally {
			cerrar();
		}		
	}

	public Collection<Cliente> leerUsuarioCliente(String clausulaWhere){
		Collection<Cliente> lista = new ArrayList<Cliente>();
		try {
			getConexion();
			estamento = conexion.createStatement();
			resultado = estamento.executeQuery
				("select u.Codigo,u.Email,u.Clave,date_format(u.UltimoAcceso,'%d-%m-%Y') as fecha, " +
				"u.TipoAcceso,u.Bloqueado,c.Nombre,c.Apellido,c.NIF_NIE,c.Direccion,c.CodigoPostal," +
				"c.Provincia,c.Municipio,c.Telefono,date_format(c.FechaNacimiento,'%d-%m-%Y') as fechaNac," +
				"date_format(c.FechaIntro,'%d-%m-%Y') as fechaIntro from usuarios as u inner join " +
				"clientes c using(Codigo) " + clausulaWhere);
			while(resultado.next()){
				Cliente cliente = new Cliente();
				cliente.setCodigo(resultado.getInt("Codigo"));
				cliente.setEmail(resultado.getString("Email"));
				cliente.setClave(resultado.getString("Clave"));
				cliente.setUltimoAcceso(resultado.getString("fecha"));
				cliente.setTipoAcceso(resultado.getString("TipoAcceso"));
				cliente.setBloqueado(resultado.getString("Bloqueado"));
				cliente.setNombre(resultado.getString("Nombre"));
				cliente.setApellidos(resultado.getString("Apellido"));
				cliente.setNifNie(resultado.getString("NIF_NIE"));
				cliente.setDireccion(resultado.getString("Direccion"));
				cliente.setLocalidad(resultado.getString("Municipio"));
				cliente.setProvincia(resultado.getString("Provincia"));
				cliente.setCodigoPostal(resultado.getString("CodigoPostal"));
				cliente.setTelefono(resultado.getString("telefono"));
				cliente.setFechaNacimiento(resultado.getString("fechaNac"));
				cliente.setFechaIntro(resultado.getString("fechaIntro"));
				lista.add(cliente);
			}
		} catch(SQLException ex){
			ex.printStackTrace();
		} finally {
			cerrar();
		}
		System.out.println("Coleccion en udao " + lista.isEmpty());
		return lista;
		
	}
	
	public void actualizarUsuario(Cliente cliente){
		try {
			getConexion();
			preparada = conexion.prepareStatement(UPDATE_STATEMENT);
			preparada.setString(1, cliente.getEmail());
			preparada.setString(2, cliente.getClave());
			preparada.setInt(3, cliente.getCodigo());
			preparada.executeUpdate();
		} catch(SQLException ex){
			ex.printStackTrace();
		} finally {
			cerrar();
		}
	}
//	
//	public boolean eliminarAmigo(int codigo){
//		boolean correcto = true;
//		try {
//			getConexion();
//			preparada = conexion.prepareStatement(DELETE_STATEMENT);
//			preparada.setInt(1, codigo);
//			preparada.executeUpdate();
//		} catch(SQLException ex){
//			correcto = false;
//			ex.printStackTrace();
//		} finally {
//			cerrar();
//		}
//		return correcto;
//	}
	
}
